package com.example.petcare.service.serviceImpl;

import com.example.petcare.exception.NoValueException;
import com.example.petcare.mapper.GoodsMapper;
import com.example.petcare.pojo.Goods;
import com.example.petcare.service.GoodsService;
import com.example.petcare.utils.ThreadLocalUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

@Service
public class GoodsServiceImpl implements GoodsService {

    @Autowired
    private GoodsMapper goodsMapper;

    // 添加增值商品
    @Override
    public void addGoods(Goods goods) {

        // 把用户订单中的商家id设置为当前登录的商家id
        Map<String,Object> map = ThreadLocalUtil.get();
        Integer providerId = (Integer) map.get("ProviderId");

        // 如果是管理员，上面就获取不到providerId，所以再获取一次
        if(providerId == null){
            providerId = (Integer) map.get("AdminId");
        }

        // 判断商品名称、描述、封面图、价格、库存、是否上架、单用户限购数量是否为null
        if (goods.getName() == null ||
                goods.getDescription() == null ||
                goods.getCoverImage() == null ||
                goods.getPrice() == null ||
                goods.getIsOnSale() == null) {
            throw new NoValueException("商品名称、描述、封面图、价格、是否上架不能为空");
        }

        // 判断商品名称、描述、封面图、价格是否为空字符串
        if (goods.getName().trim().isEmpty() ||
                goods.getDescription().trim().isEmpty() ||
                goods.getCoverImage().trim().isEmpty() ||
                goods.getPrice().toString().trim().isEmpty() ) {
            throw new NoValueException("商品名称、描述、封面图、价格、不能为空");
        }

        // 判断商品名称、描述、封面图、价格、单用户限购数量是否为负数
        if (goods.getPrice() < 0 ) {
            throw new NoValueException("商品价格不能为负数");
        }


        // 补充创建的时间
        goods.setCreateTime(LocalDateTime.now());

        // 补充商家id
        goods.setProviderId(providerId);



        // 调用mapper方法插入商品
        goodsMapper.addGoods(goods);
    }

    // 修改增值商品
    @Override
    public void updateGoods(Goods goods) {

        // 把用户订单中的商家id设置为当前登录的商家id
        Map<String,Object> map = ThreadLocalUtil.get();
        Integer providerId = (Integer) map.get("ProviderId");

        // 如果是管理员，上面就获取不到providerId，所以再获取一次
        if(providerId == null){
            providerId = (Integer) map.get("AdminId");
        }

        // 判断商品名称、描述、封面图、价格、库存、是否上架、单用户限购数量是否为null
        if (goods.getName() == null ||
                goods.getDescription() == null ||
                goods.getCoverImage() == null ||
                goods.getPrice() == null ||
                goods.getIsOnSale() == null) {
            throw new NoValueException("商品名称、描述、封面图、价格、是否上架不能为空");
        }

        // 判断商品名称、描述、封面图、价格、库存、单用户限购数量是否为空字符串
        if (goods.getName().trim().isEmpty() ||
                goods.getDescription().trim().isEmpty() ||
                goods.getCoverImage().trim().isEmpty() ||
                goods.getPrice().toString().trim().isEmpty()) {
            throw new NoValueException("商品名称、描述、封面图、价格不能为空");
        }

        // 判断商品价格是否为负数
        if (goods.getPrice() < 0 ) {
            throw new NoValueException("商品价格、库存、单用户限购数量不能为负数");
        }

        // 补充更新的时间
        goods.setUpdateTime(LocalDateTime.now());

        // 补充商家id
        goods.setProviderId(providerId);

        // 输出你好
        System.out.println("你好");

        // 输出商品所有信息
        System.out.println(goods.toString());

        if (goods.getGId() == null) {
            throw new NoValueException("商品ID不能为空");
        }

        //

        // 调用mapper方法更新商品
        goodsMapper.updateGoods(goods);

    }

    // 查看增值商品列表
    @Override
    public List<Goods> getGoodsList() {

        // 从ThreadLocal中获取商家id
        Map<String,Object> map = ThreadLocalUtil.get();
        Integer providerId = (Integer) map.get("ProviderId");
        // 如果是管理员，上面就获取不到providerId，所以再获取一次
        if(providerId == null){
            providerId = (Integer) map.get("AdminId");
        }

        return goodsMapper.list(providerId);


    }

    // 删除增值商品
    @Override
    public void deleteGoods(Integer gId) {

        // 判断商品id是否为null
        if (gId == null) {
            throw new NoValueException("商品ID不能为空");
        }

        // 调用mapper方法删除商品
        goodsMapper.deleteGoods(gId);
    }

    // 修改商品上下架状态
    @Override
    public void updateGoodsStatus(Integer gId, Boolean isOnSale) {

        // 判断商品id是否为null
        if (gId == null) {
            throw new NoValueException("商品ID不能为空");
        }

        // 判断上下架状态是否为null
        if (isOnSale == null) {
            throw new NoValueException("上下架状态不能为空");
        }

        // 只要修改就要更新时间
        Goods goods = goodsMapper.findById(gId);
        if (goods == null) {
            throw new NoValueException("商品不存在");
        }
        goods.setUpdateTime(LocalDateTime.now());





        // 调用mapper方法修改商品上下架状态
        goodsMapper.updateGoodsStatus(gId, isOnSale);
    }


}
